React์ useFormStatus ํ ์ ๋ํ ํฌ๊ด์ ์ธ ๊ฐ์ด๋๋ก, ํผ ์ ์ถ ์งํ ์ํฉ ์ถ์ , ์ค๋ฅ ์ฒ๋ฆฌ ๋ฐ ์ต์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ํฅ์๋ ์ฌ์ฉ์ ๊ฒฝํ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ค๋ฃน๋๋ค.
React useFormStatus: ํผ ์ ์ถ ์งํ ์ํฉ ์ถ์ ๋ง์คํฐํ๊ธฐ
์ต์ ์น ๊ฐ๋ฐ์์ ํผ ์ ์ถ ์ค์ ์ํํ๊ณ ์ ์ตํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. React 18์ ๋์
๋ React์ useFormStatus ํ
์ ํผ์ ์ ์ถ ์ํ๋ฅผ ์ถ์ ํ๊ธฐ ์ํ ๊ฐ๋ ฅํ๊ณ ์ฐ์ํ ์๋ฃจ์
์ ์ ๊ณตํฉ๋๋ค. ์ด ํฌ๊ด์ ์ธ ๊ฐ์ด๋๋ useFormStatus์ ๋ณต์ก์ฑ์ ์์ธํ ์ดํด๋ณด๊ณ , ๊ทธ ๊ธฐ๋ฅ, ์ฌ์ฉ ์ฌ๋ก ๋ฐ ๋งค๋ ฅ์ ์ด๊ณ ๋ฐ์์ฑ์ด ๋ฐ์ด๋ ํผ ์ํธ ์์ฉ์ ๋ง๋ค๊ธฐ ์ํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ํ๊ตฌํฉ๋๋ค.
React useFormStatus๋ ๋ฌด์์ธ๊ฐ?
useFormStatus๋ ํผ ์ ์ถ ์ํ์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋๋ก ์ค๊ณ๋ React ํ
์
๋๋ค. ์ ์ถ ์งํ ์ํฉ ๊ด๋ฆฌ ๋ฐ ํ์, ์ค๋ฅ ์ฒ๋ฆฌ ๋ฐ ๊ทธ์ ๋ฐ๋ผ UI ์
๋ฐ์ดํธ ํ๋ก์ธ์ค๋ฅผ ๋จ์ํํฉ๋๋ค. ๋์
๋๊ธฐ ์ ์ ๊ฐ๋ฐ์๋ ๋ณต์กํ๊ณ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฌ์ด ์ฝ๋๋ฅผ ์ด๋ํ ์ ์๋ ์๋ ์ํ ๊ด๋ฆฌ ๋ฐ ๋น๋๊ธฐ ์์
์ ์์กดํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์์ต๋๋ค.
์ด ํ ์ ๋ค์ ์์ฑ์ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค.
pending: ํผ์ด ํ์ฌ ์ ์ถ ์ค์ธ์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ ๋ถ์ธ ๊ฐ์ ๋๋ค.data: ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒฝ์ฐ ํผ์์ ์ ์ถํ ๋ฐ์ดํฐ์ ๋๋ค.method: ํผ ์ ์ถ์ ์ฌ์ฉ๋ HTTP ๋ฉ์๋์ ๋๋ค (์: "POST", "GET").action: ํผ ์ ์ถ์ ์ฒ๋ฆฌํ๋ ํจ์ ๋๋ URL์ ๋๋ค.error: ์ ์ถ์ ์คํจํ ๊ฒฝ์ฐ ์ค๋ฅ ๊ฐ์ฒด์ ๋๋ค. ์ด๋ฅผ ํตํด ์ฌ์ฉ์์๊ฒ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ํ์ํ ์ ์์ต๋๋ค.
useFormStatus๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ์ด์ ๋ฐ ์ฅ์
useFormStatus๋ฅผ ํ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ช ๊ฐ์ง ์ฃผ์ ์ด์ ์ ์ป์ ์ ์์ต๋๋ค.
- ๋จ์ํ๋ ํผ ์ํ ๊ด๋ฆฌ: ํผ ์ ์ถ ์ํ ๊ด๋ฆฌ๋ฅผ ์ค์ ์ง์คํํ์ฌ ์์ฉ๊ตฌ ์ฝ๋๋ฅผ ์ค์ด๊ณ ์ ์ง ๊ด๋ฆฌ์ฑ์ ํฅ์์ํต๋๋ค.
- ํฅ์๋ ์ฌ์ฉ์ ๊ฒฝํ: ์ฌ์ฉ์์๊ฒ ์ ์ถ ์งํ ์ํฉ์ ๋ํ๋ด๋ ๋ช ํํ๊ณ ์ผ๊ด๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ฌ ์ฐธ์ฌ๋๋ฅผ ๋์ด๊ณ ๋ถ๋ง์ ์ค์ ๋๋ค.
- ํฅ์๋ ์ค๋ฅ ์ฒ๋ฆฌ: ์ค๋ฅ ๊ฐ์ง ๋ฐ ๋ณด๊ณ ๋ฅผ ๋จ์ํํ์ฌ ์ ์ถ ์คํจ๋ฅผ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
- ์ ์ธ์ ์ ๊ทผ ๋ฐฉ์: ์ฝ๋๋ฅผ ๋ ์ฝ๊ฒ ์ฝ๊ณ ์ดํดํ ์ ์๋๋ก ๋ณด๋ค ์ ์ธ์ ์ธ ์ฝ๋ฉ ์คํ์ผ์ ์ด์งํฉ๋๋ค.
- ์๋ฒ ์์ ๊ณผ์ ํตํฉ: React Server Actions์ ์ํํ๊ฒ ํตํฉ๋์ด ์๋ฒ ๋ ๋๋ง ์ ํ๋ฆฌ์ผ์ด์ ์์ ํผ ์ฒ๋ฆฌ๋ฅผ ๋์ฑ ๊ฐ์ํํฉ๋๋ค.
๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ: ๊ฐ๋จํ ์
useFormStatus์ ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ์ ์ค๋ช
ํ๊ธฐ ์ํด ๊ธฐ๋ณธ ์์ ๋ถํฐ ์์ํ๊ฒ ์ต๋๋ค.
์๋๋ฆฌ์ค: ๊ฐ๋จํ ๋ฌธ์ ์์
์ด๋ฆ, ์ด๋ฉ์ผ ๋ฐ ๋ฉ์์ง ํ๋๊ฐ ์๋ ๊ฐ๋จํ ๋ฌธ์ ์์์ ์์ํด ๋ณด์ญ์์ค. ํผ์ด ์ ์ถ๋๋ ๋์ ๋ก๋ฉ ํ์๊ธฐ๋ฅผ ํ์ํ๊ณ ์ ์ถ์ ์คํจํ๋ฉด ์ค๋ฅ ๋ฉ์์ง๋ฅผ ํ์ํ๋ ค๊ณ ํฉ๋๋ค.
์ฝ๋ ์์
๋จผ์ ๊ฐ๋จํ ์๋ฒ ์์ ์ ์ ์ํด ๋ณด๊ฒ ์ต๋๋ค (์ผ๋ฐ์ ์ผ๋ก ๋ณ๋์ ํ์ผ์ ์์ง๋ง ์์ ์ฑ์ ์ํด ์ฌ๊ธฐ์ ํฌํจ๋จ).
async function submitForm(formData) {
'use server';
// "๋๊ธฐ ์ค" ์ํ๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ์ง์ฐ์ ์๋ฎฌ๋ ์ด์
ํฉ๋๋ค.
await new Promise(resolve => setTimeout(resolve, 2000));
// ์ ์ฌ์ ์ธ ์ค๋ฅ๋ฅผ ์๋ฎฌ๋ ์ด์
ํฉ๋๋ค.
const name = formData.get('name');
if (name === 'error') {
throw new Error('์๋ฎฌ๋ ์ด์
๋ ์ ์ถ ์ค๋ฅ.');
}
console.log('ํผ์ด ์ฑ๊ณต์ ์ผ๋ก ์ ์ถ๋์์ต๋๋ค:', formData);
return { message: 'ํผ์ด ์ฑ๊ณต์ ์ผ๋ก ์ ์ถ๋์์ต๋๋ค!' };
}
์ด์ useFormStatus๋ฅผ ์ฌ์ฉํ์ฌ React ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
'use client';
import { useFormStatus } from 'react-dom';
function ContactForm() {
const { pending, data, error } = useFormStatus();
return (
);
}
export default ContactForm;
์ค๋ช
'react-dom'์์useFormStatus๋ฅผ ๊ฐ์ ธ์ต๋๋ค. ํด๋ผ์ด์ธํธ ์ธก ํ ์ ์ฌ์ฉํ๋ฏ๋ก ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์ ๋๋ค.pending,data๋ฐerror๊ฐ์ ์ป๊ธฐ ์ํดContactForm์ปดํฌ๋ํธ ๋ด์์useFormStatus()๋ฅผ ํธ์ถํฉ๋๋ค.pending๊ฐ์ ํผ์ด ์ ์ถ๋๋ ๋์ ์ ์ถ ๋ฒํผ์ ๋นํ์ฑํํ๊ณ "์ ์ถ ์ค..." ๋ฉ์์ง๋ฅผ ํ์ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.error๊ฐ ๋ฐ์ํ๋ฉด ํด๋น ๋ฉ์์ง๊ฐ ๋นจ๊ฐ์ ๋จ๋ฝ์ผ๋ก ํ์๋ฉ๋๋ค.- ์๋ฒ ์์
์์
data๊ฐ ๋ฐํ๋๋ฉด ์ฑ๊ณต ๋ฉ์์ง๋ฅผ ํ์ํฉ๋๋ค.
๊ณ ๊ธ ์ฌ์ฉ ์ฌ๋ก ๋ฐ ๊ธฐ์
๊ธฐ๋ณธ ์์ ์ธ์๋ useFormStatus๋ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํค๊ณ ๋ค์ํ ํผ ์ ์ถ ์๊ตฌ ์ฌํญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋ ๋ณต์กํ ์๋๋ฆฌ์ค์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
1. ์ฌ์ฉ์ ์ ์ ๋ก๋ฉ ํ์๊ธฐ ๋ฐ ์ ๋๋ฉ์ด์
๊ฐ๋จํ "์ ์ถ ์ค..." ํ ์คํธ ๋์ ์ฌ์ฉ์ ์ ์ ๋ก๋ฉ ํ์๊ธฐ ๋๋ ์ ๋๋ฉ์ด์ ์ ์ฌ์ฉํ์ฌ ๋ณด๋ค ์๊ฐ์ ์ผ๋ก ๋งค๋ ฅ์ ์ธ ๊ฒฝํ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์คํผ๋ ์ปดํฌ๋ํธ ๋๋ ์งํ๋ฅ ํ์์ค์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
function ContactForm() {
const { pending, error } = useFormStatus();
return (
);
}
function Spinner() {
return ๋ก๋ฉ ์ค...; // ์คํผ๋ ์ปดํฌ๋ํธ๋ก ๊ต์ฒด
}
2. ๋๊ด์ ์ ๋ฐ์ดํธ
๋๊ด์ ์ ๋ฐ์ดํธ๋ ์๋ฒ์์ ํ์ธ์ ๋ฐ๊ธฐ ์ ์๋ ํผ ์ ์ถ์ด ์ฑ๊ณตํ ๊ฒ์ฒ๋ผ UI๋ฅผ ์ ๋ฐ์ดํธํ์ฌ ์ฌ์ฉ์์๊ฒ ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ธ์ง๋ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค.
์ฐธ๊ณ : ๋๊ด์ ์ ๋ฐ์ดํธ์๋ ์ค๋ฅ ์ฒ๋ฆฌ ๋ฐ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ์ ์คํ๊ฒ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. ์ ์ถ์ ์คํจํ๋ฉด UI๋ฅผ ์ด์ ์ํ๋ก ๋๋๋ ค์ผ ํฉ๋๋ค.
3. ๋ค์ํ ์ค๋ฅ ์๋๋ฆฌ์ค ์ฒ๋ฆฌ
useFormStatus์์ ๋ฐํ๋ error ์์ฑ์ ์ฌ์ฉํ๋ฉด ์ ํจ์ฑ ๊ฒ์ฌ ์ค๋ฅ, ๋คํธ์ํฌ ์ค๋ฅ ๋ฐ ์๋ฒ ์ธก ์ค๋ฅ์ ๊ฐ์ ๋ค์ํ ์ค๋ฅ ์๋๋ฆฌ์ค๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์กฐ๊ฑด๋ถ ๋ ๋๋ง์ ์ฌ์ฉํ์ฌ ์ค๋ฅ ์ ํ์ ๋ฐ๋ผ ํน์ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ํ์ํ ์ ์์ต๋๋ค.
function ContactForm() {
const { pending, error } = useFormStatus();
return (
);
}
4. ํ์ฌ ํผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ํตํฉ
useFormStatus๋ ํผ ์ ์ถ ์ํ๋ฅผ ์ถ์ ํ๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ง๋ง Formik ๋๋ React Hook Form๊ณผ ๊ฐ์ ๋ณด๋ค ํฌ๊ด์ ์ธ ํผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํตํฉํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ ํจ์ฑ ๊ฒ์ฌ, ํผ ์ํ ๊ด๋ฆฌ ๋ฐ ์ ์ถ ์ฒ๋ฆฌ์ ๊ฐ์ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
useFormStatus๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ถ ์งํ ์ํฉ์ ํ์ํ๊ณ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๋ ์ผ๊ด๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ฌ ์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ณด๊ฐํ ์ ์์ต๋๋ค.
5. ์งํ๋ฅ ํ์์ค ๋ฐ ๋ฐฑ๋ถ์จ
์คํ ์๊ฐ์ด ๊ธด ํผ ์ ์ถ์ ๊ฒฝ์ฐ ์งํ๋ฅ ํ์์ค ๋๋ ๋ฐฑ๋ถ์จ์ ํ์ํ๋ฉด ์ฌ์ฉ์์๊ฒ ๊ท์คํ ํผ๋๋ฐฑ์ ์ ๊ณตํ๊ณ ๊ณ์ ์ฐธ์ฌํ ์ ์์ต๋๋ค. `useFormStatus`๋ ์งํ๋ฅ ์ ์ง์ ์ ๊ณตํ์ง ์์ง๋ง ์งํ๋ฅ ์ ๋ณด๊ณ ํ๋ ์๋ฒ ์์ ๊ณผ ๊ฒฐํฉํ ์ ์์ต๋๋ค (์: ์๋ฒ ์ ์ก ์ด๋ฒคํธ ๋๋ ์น ์์ผ์ ํตํด).
useFormStatus ์ฌ์ฉ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
useFormStatus๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ๊ณ ๊ฐ๋ ฅํ๊ณ ์ฌ์ฉ์ ์นํ์ ์ธ ํผ ํ๊ฒฝ์ ๋ง๋ค๋ ค๋ฉด ๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ณ ๋ คํ์ญ์์ค.
- ๋ช ํํ ์๊ฐ์ ํผ๋๋ฐฑ ์ ๊ณต: ํผ ์ ์ถ ์ค์ ๋ก๋ฉ ํ์๊ธฐ, ์งํ๋ฅ ํ์์ค ๋๋ ์ํ ๋ฉ์์ง์ ๊ฐ์ ์๊ฐ์ ํผ๋๋ฐฑ์ ํญ์ ์ฌ์ฉ์์๊ฒ ์ ๊ณตํฉ๋๋ค.
- ์ค๋ฅ๋ฅผ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌ: ๊ฐ๋ ฅํ ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํ์ฌ ์ ์ถ ์คํจ๋ฅผ ๊ฐ์งํ๊ณ ๋ณด๊ณ ํ๊ณ ์ฌ์ฉ์์๊ฒ ์ ์ตํ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ์ ๊ทผ์ฑ ๊ณ ๋ ค: ์ ์ ํ ARIA ์์ฑ ๋ฐ ํค๋ณด๋ ํ์ ์ง์์ ์ ๊ณตํ์ฌ ์ฅ์ ๊ฐ ์๋ ์ฌ์ฉ์๊ฐ ํผ ์ํธ ์์ฉ์ ์ก์ธ์คํ ์ ์๋๋ก ํฉ๋๋ค.
- ์ฑ๋ฅ ์ต์ ํ: ์ปดํฌ๋ํธ๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์ ํ๊ณ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์ต์ ํํ์ฌ ๋ถํ์ํ ๋ค์ ๋ ๋๋ง์ ํผํ์ญ์์ค.
- ์ฒ ์ ํ ํ ์คํธ: ํผ ์ํธ ์์ฉ์ด ๋ค์ํ ์๋๋ฆฌ์ค ๋ฐ ํ๊ฒฝ์์ ์์๋๋ก ์๋ํ๋์ง ํ์ธํ๊ธฐ ์ํด ์ฒ ์ ํ ํ ์คํธํ์ญ์์ค.
useFormStatus ๋ฐ ์๋ฒ ์์
useFormStatus๋ ์๋ฒ์์ ์ง์ ํผ ์ ์ถ์ ์ฒ๋ฆฌํ๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ธ React Server Actions์ ์ํํ๊ฒ ์๋ํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. Server Actions๋ฅผ ์ฌ์ฉํ๋ฉด ๋ณ๋์ API ์๋ํฌ์ธํธ ์์ด React ์ปดํฌ๋ํธ์์ ์ง์ ํธ์ถํ ์ ์๋ ์๋ฒ ์ธก ํจ์๋ฅผ ์ ์ํ ์ ์์ต๋๋ค.
Server Actions์ ํจ๊ป ์ฌ์ฉํ๋ฉด useFormStatus๋ ์์
์ ์ ์ถ ์ํ๋ฅผ ์๋์ผ๋ก ์ถ์ ํ์ฌ ํผ ์ํธ ์์ฉ์ ๊ด๋ฆฌํ๋ ๊ฐ๋จํ๊ณ ์ผ๊ด๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
๊ธฐ์กด ํผ ์ฒ๋ฆฌ์์ ๋น๊ต
useFormStatus ์ด์ ์๋ ๊ฐ๋ฐ์๊ฐ ์๋ ์ํ ๊ด๋ฆฌ ๋ฐ ๋น๋๊ธฐ ์์
์ ์์กดํ์ฌ ํผ ์ ์ถ์ ์ฒ๋ฆฌํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์์ต๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์๋ ์ผ๋ฐ์ ์ผ๋ก ๋ค์ ๋จ๊ณ๊ฐ ํฌํจ๋ฉ๋๋ค.
- ์ ์ถ ์ํ๋ฅผ ์ถ์ ํ๊ธฐ ์ํ ์ํ ๋ณ์ ์์ฑ (์:
isSubmitting). - ํผ ์ ์ถ์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ด๋ฒคํธ ํธ๋ค๋ฌ ์์ฑ.
- ์๋ฒ์ ๋น๋๊ธฐ ์์ฒญ ๋ณด๋ด๊ธฐ.
- ์๋ฒ์ ์๋ต์ ๋ฐ๋ผ ์ํ ์ ๋ฐ์ดํธ.
- ์ค๋ฅ ์ฒ๋ฆฌ ๋ฐ ์ค๋ฅ ๋ฉ์์ง ํ์.
์ด ์ ๊ทผ ๋ฐฉ์์ ํนํ ์ฌ๋ฌ ํ๋์ ์ ํจ์ฑ ๊ฒ์ฌ ๊ท์น์ด ์๋ ๋ณต์กํ ํผ์ ๊ฒฝ์ฐ ๋ฒ๊ฑฐ๋กญ๊ณ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ์ต๋๋ค. useFormStatus๋ ํผ ์ ์ถ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ์ ์ธ์ ์ด๊ณ ์ค์ ์ง์ค์์ธ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ฌ ์ด ํ๋ก์ธ์ค๋ฅผ ๋จ์ํํฉ๋๋ค.
์ค์ ์์ ๋ฐ ์ฌ์ฉ ์ฌ๋ก
useFormStatus๋ ๋ค์๊ณผ ๊ฐ์ ๊ด๋ฒ์ํ ์ค์ ์๋๋ฆฌ์ค์ ์ ์ฉํ ์ ์์ต๋๋ค.
- ์ ์ ์๊ฑฐ๋ ๊ฒฐ์ ํผ: ๊ฒฐ์ ์ ๋ณด๋ฅผ ์ฒ๋ฆฌํ๋ ๋์ ๋ก๋ฉ ํ์๊ธฐ ํ์.
- ์ฌ์ฉ์ ๋ฑ๋ก ํผ: ์ฌ์ฉ์ ์ ๋ ฅ ์ ํจ์ฑ ๊ฒ์ฌ ๋ฐ ๊ณ์ ์์ฑ ์ฒ๋ฆฌ.
- ์ฝํ ์ธ ๊ด๋ฆฌ ์์คํ : ๊ธฐ์ฌ, ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ ๋ฐ ๊ธฐํ ์ฝํ ์ธ ์ ์ถ.
- ์์ ๋ฏธ๋์ด ํ๋ซํผ: ๋๊ธ ๊ฒ์, ๊ฒ์๋ฌผ ์ข์์ ๋ฐ ์ฝํ ์ธ ๊ณต์ .
- ๊ธ์ต ์ ํ๋ฆฌ์ผ์ด์ : ํธ๋์ญ์ ์ฒ๋ฆฌ, ๊ณ์ ๊ด๋ฆฌ ๋ฐ ๋ณด๊ณ ์ ์์ฑ.
๊ฒฐ๋ก
React์ useFormStatus ํ
์ ์ต์ ์น ์ ํ๋ฆฌ์ผ์ด์
์์ ํผ ์ ์ถ ์งํ ์ํฉ์ ๊ด๋ฆฌํ๊ณ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํค๋ ๋ฐ ์ ์ฉํ ๋๊ตฌ์
๋๋ค. ํผ ์ํ ๊ด๋ฆฌ ๋จ์ํ, ์ค๋ฅ ์ฒ๋ฆฌ ๊ฐ์ ๋ฐ ์ ์ธ์ ์ ๊ทผ ๋ฐฉ์ ์ ๊ณต์ ํตํด useFormStatus๋ ๊ฐ๋ฐ์๊ฐ ๋์ฑ ๋งค๋ ฅ์ ์ด๊ณ ๋ฐ์์ฑ์ด ๋ฐ์ด๋ ํผ ์ํธ ์์ฉ์ ๋ง๋ค ์ ์๋๋ก ์ง์ํฉ๋๋ค. ๊ทธ ๊ธฐ๋ฅ, ์ฌ์ฉ ์ฌ๋ก ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ดํดํจ์ผ๋ก์จ useFormStatus๋ฅผ ํ์ฉํ์ฌ ์ค๋๋ ์ ์น ๊ฐ๋ฐ ํ๊ฒฝ์ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๋ ๊ฐ๋ ฅํ๊ณ ์ฌ์ฉ์ ์นํ์ ์ธ ํผ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
useFormStatus๋ฅผ ํ์ํ ๋ ์ ๊ทผ์ฑ, ์ฑ๋ฅ ์ต์ ํ ๋ฐ ์ฒ ์ ํ ํ
์คํธ๋ฅผ ๊ณ ๋ คํ์ฌ ํผ์ด ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ์ํด ๊ธฐ๋ฅ์ ์ด๊ณ ์ฌ์ฉ์ ์นํ์ ์ธ์ง ํ์ธํ์ญ์์ค. ์ด๋ฌํ ์์น์ ์ ์ฉํ๋ฉด ์ํํ๊ณ ์ ์ตํ๋ฉฐ ๋งค๋ ฅ์ ์ธ ํผ ์ํธ ์์ฉ์ ๋ง๋ค์ด ๊ถ๊ทน์ ์ผ๋ก ์ ๋ฐ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
์ด ๊ธฐ์ฌ์์๋ useFormStatus์ ๋ํ ํฌ๊ด์ ์ธ ๊ฐ์๋ฅผ ์ ๊ณตํ์ต๋๋ค. ์ต์ ์ ๋ณด ๋ฐ API ์ธ๋ถ ์ ๋ณด๋ ๊ณต์ React ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ญ์์ค. ์ฆ๊ฑฐ์ด ์ฝ๋ฉ ๋์ธ์!